www.gusucode.com > VC++ 树节点动态添加插入-源码程序 > VC++ 树节点动态添加插入-源码程序/code/zipfunc/ZUBaseFile.cpp

    //Download by http://www.NewXing.com
// ZUBaseFile.cpp: implementation of the CZUBaseFile class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ZUBaseFile.h"
#include <afxcoll.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CZUBaseFile::CZUBaseFile()
{
	m_bZipFile = true;
	m_bDetectZlibMemoryLeaks = true;
	m_pFile = NULL;
}

CZUBaseFile::~CZUBaseFile()
{
	if (m_list.GetCount())
	{
// some memory hasn't been freed due to an error in zlib, so free it now
		POSITION pos = m_list.GetHeadPosition();
		while (pos)
			delete[] m_list.GetNext(pos);
		
	}
}

bool CZUBaseFile::IsClosed()
{
	return  !m_pFile || (m_pFile->m_hFile == CFile::hFileNull);
}

void* CZUBaseFile::myalloc(void* opaque, UINT items, UINT size)
{
	void* p = new char[size * items];
	if (opaque)
	{
		CPtrList* list  = (CPtrList*) opaque;
		list->AddTail(p);
	}
	return p;
}

void CZUBaseFile::myfree(void* opaque, void* address)
{
	if (opaque)
	{
		CPtrList* list  = (CPtrList*) opaque;
		POSITION pos = list->Find(address);
		if (pos)
			list->RemoveAt(pos);
	}
	delete[] address;
}

void CZUBaseFile::ThrowError(int err)
{
	CString fileName = IsClosed() ? "" : m_pFile->GetFilePath();
	AfxThrowZipException(err, fileName, m_bZipFile);
}

void CZUBaseFile::CheckForError(int err)
{
// 	ASSERT (err != Z_NEED_DICT);
// 	ASSERT (err != Z_STREAM_END);

	if ((err == Z_OK) || (err == Z_NEED_DICT))
		return;

	ThrowError(err);

}